using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Define Mosaic Dataset NoData</para>
    /// <para>Specifies one or more values to be represented as NoData.</para>
    /// <para>指定要表示为 NoData 的一个或多个值。</para>
    /// </summary>    
    [DisplayName("Define Mosaic Dataset NoData")]
    public class DefineMosaicDatasetNoData : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DefineMosaicDatasetNoData()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset where you want to update the NoData values.</para>
        /// <para>要更新 NoData 值的镶嵌数据集。</para>
        /// </param>
        /// <param name="_num_bands">
        /// <para>Number of Bands</para>
        /// <para>The number of bands in the mosaic dataset.</para>
        /// <para>镶嵌数据集中的波段数。</para>
        /// </param>
        public DefineMosaicDatasetNoData(object _in_mosaic_dataset, long? _num_bands)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
            this._num_bands = _num_bands;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Define Mosaic Dataset NoData";

        public override string CallName => "management.DefineMosaicDatasetNoData";

        public override List<string> AcceptEnvironments => ["extent"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _num_bands, _bands_for_nodata_value, _bands_for_valid_data_range, _where_clause, _Composite_nodata_value.GetGPValue(), _out_mosaic_dataset];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset where you want to update the NoData values.</para>
        /// <para>要更新 NoData 值的镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Number of Bands</para>
        /// <para>The number of bands in the mosaic dataset.</para>
        /// <para>镶嵌数据集中的波段数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of Bands")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public long? _num_bands { get; set; }


        /// <summary>
        /// <para>Bands for NoData Value</para>
        /// <para><xdoc>
        ///   <para>Specify the NoData value for each band. Each band can have a unique NoData value defined, or you can use the same value for all bands. Choose the band from the drop-down list and then enter a value or multiple values. If you choose multiple NoData values, separate each value with a space.</para>
        ///   <para>If the function chain for each raster within the mosaic dataset contains the Composite Bands function, or if your raster data was added with a raster type that adds the Composite Bands function to each raster's function chain, then any value you specify will apply to all bands.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定每个波段的 NoData 值。每个波段可以定义唯一的 NoData 值，也可以对所有波段使用相同的值。从下拉列表中选择波段，然后输入一个或多个值。如果选择多个 NoData 值，请用空格分隔每个值。</para>
        ///   <para>如果镶嵌数据集中每个栅格的函数链都包含复合波段函数，或者栅格数据是使用栅格类型添加的，该栅格类型将复合波段函数添加到每个栅格的函数链，则您指定的任何值都将应用于所有波段。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Bands for NoData Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _bands_for_nodata_value { get; set; } = null;


        /// <summary>
        /// <para>Bands For Valid Data Range</para>
        /// <para>Specify a range of values to display for each band. Values outside of this range will be classified as NoData. When working with composite bands, the range will apply to all bands.</para>
        /// <para>指定要为每个波段显示的值范围。超出此范围的值将被归类为 NoData。使用复合波段时，该范围将应用于所有波段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Bands For Valid Data Range")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _bands_for_valid_data_range { get; set; } = null;


        /// <summary>
        /// <para>Query Definition</para>
        /// <para>An SQL statement to select specific raster in the mosaic dataset. Only the selected rasters will have their NoData values changed.</para>
        /// <para>用于在镶嵌数据集中选择特定栅格的 SQL 语句。只有所选栅格的 NoData 值才会更改。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Composite NoData value from each band</para>
        /// <para><xdoc>
        ///   <para>Choose whether all bands must be NoData in order for the pixel to be classified as NoData.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—If any band has pixels of NoData, then the pixel is classified as NoData. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—All bands must have pixels of NoData for the pixel to be classified as NoData.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择是否所有波段都必须为 NoData，才能将像素分类为 NoData。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 如果任何波段的像素为 NoData，则该像素被归类为 NoData。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 所有波段都必须具有 NoData 像素，像素才能被归类为 NoData。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Composite NoData value from each band")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _Composite_nodata_value_value _Composite_nodata_value { get; set; } = _Composite_nodata_value_value._false;

        public enum _Composite_nodata_value_value
        {
            /// <summary>
            /// <para>COMPOSITE_NODATA</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("COMPOSITE_NODATA")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_COMPOSITE_NODATA</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_COMPOSITE_NODATA")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public DefineMosaicDatasetNoData SetEnv(object extent = null)
        {
            base.SetEnv(extent: extent);
            return this;
        }

    }

}